﻿using System;

namespace KWatkins.FluentMoqBuilder.Argument
{
	internal interface IDateTime
	{
		/// <summary>
		/// Validates the argument is after some value.
		/// </summary>
		/// <param name="minimum">The minimum value to test against.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		/// If the argument is not after <paramref name="minimum" />.
		/// </exception>
		/// <returns>A <see cref="IDateTime" /> to continue validation.</returns>
		IDateTime IsAfter(DateTime minimum);

		/// <summary>
		/// Validates the argument is after or the same as some value.
		/// </summary>
		/// <param name="minimum">The minimum value to test against.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		/// If the argument is not after or the same as <paramref name="minimum" />.
		/// </exception>
		/// <returns>A <see cref="IDateTime" /> to continue validation.</returns>
		IDateTime IsAfterOrTheSame(DateTime minimum);

		/// <summary>
		/// Validates the argument is before some value.
		/// </summary>
		/// <param name="maximum">The maximum value to test against.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		/// If the argument is not before <paramref name="maximum" />.
		/// </exception>
		/// <returns>A <see cref="IDateTime" /> to continue validation.</returns>
		IDateTime IsBefore(DateTime maximum);

		/// <summary>
		/// Validates the argument is before or the same as some value.
		/// </summary>
		/// <param name="maximum">The maximum value to test against.</param>
		/// <exception cref="ArgumentOutOfRangeException">
		/// If the argument is not before or the same as <paramref name="maximum" />.
		/// </exception>
		/// <returns>A <see cref="IDateTime" /> to continue validation.</returns>
		IDateTime IsBeforeOrTheSame(DateTime maximum);
	}
}
